package com.luxf.base.domainevent.eventtype;

/**
 * 事件类型加载器
 * 用于在event类不同包同名时的映射
 * 例如在上游服务抛出的是a.b.c.TestEvent
 * 那么在下游服务如果想自定义事件d.e.f.Test2Event接收,可以使用EventTypeConfigurer进行配置
 * classType配置为a.b.c.TestEvent,值配置为d.e.f.Test2Event的class对象
 *
 * @author fast66
 * 2021-06-29 14:54
 **/
public interface EventTypeLoader {

    /**
     * 根据class类型加载目标类型
     *
     * @param classTypeName 类型描述(类名全路径)
     * @param version       类版本
     * @return 目标类型
     */
    Class<?> loadTargetClass(String classTypeName, String version) throws ClassNotFoundException;

    /**
     * 根据类型查找topic
     *
     * @param target 目标类型
     * @return 对应类型全路径
     */
    String loadClassTypeName(Class<?> target);

    /**
     * 注册类型
     *
     * @param classTypeName 类型描述(类名全路径)
     * @param targetType    对应类
     */
    void register(String classTypeName, Class<?> targetType);
}
